1include <BOSL2/std.scad>
 2
 3// Inspired by https://www.youtube.com/watch?v=3V80-Fm_5Gs
 4// See http://iotic.com/flutomat/
 5
 6// Params start
 7// Body
 8inside_diameter = 16; //mm
 9wall_thickness = 1.25; //mm
10mouthpiece_length = 22; //mm
11mouthpiece_angle = 45; //deg
12
13// Tunings
14edge_distance = 270;//mm distance from center of edge distance to end of flute
15extra_tuning_length = 10; //mm
16extra_tuning_diameter = 2.5; //mm
17
18holes = [[7,146.5],[7.5,128],[8,107],[6.5,83.5],[9,65],[8,39]];//[diameter,distance_from_end_of_flute]
19
20// Duct
21edge_length = 5;//mm
22duct_width=7;//mm
23edge_angle=60;//deg
24edge_fine_tune_x = 0.7; //mm until edge is continuous
25edge_fine_tune_z = 1.3; //mm until the curve is gone from the cylinder
26mouthpiece_external_cut_width=4;//mm
27mouthpiece_external_cut_height=10;//mm
28
29// Print
30tolerance = 0.05; //mm
31clip_plane_size = [100,100,100];//mm
32resolution = 100;
33
34//Calc
35body_length=mouthpiece_length+edge_distance+edge_length/2+extra_tuning_length;
36
37// Params end
38
39
40module clip_angle(){
41    translate([-inside_diameter/2-wall_thickness*2,-inside_diameter/2-wall_thickness*2,mouthpiece_length]) rotate([0,mouthpiece_angle,0])cube(clip_plane_size);}
42
43difference(){
44        cylinder(d=inside_diameter+wall_thickness*4,h=mouthpiece_length,$fn=resolution);
45    cylinder(d=inside_diameter+wall_thickness*2+tolerance*2,h=mouthpiece_length,$fn=resolution);
46    clip_angle();
47    translate([0,-mouthpiece_external_cut_width/2,0])cube([inside_diameter/2+wall_thickness*2,mouthpiece_external_cut_width,mouthpiece_external_cut_height]);
48}